//package com.example.reactor.lazy;
//
//import java.util.ArrayList;
//import java.util.List;
//import java.util.function.Consumer;
//import java.util.function.Function;
//
//interface Publisher<T> {
//    void subscribe(Subscriber<? super T> subscriber);
//}
//
//interface Subscriber<T> {
//    void onNext(T value);
//
//    void onComplete();
//
//    void onError(Throwable t);
//}
//
//class Mono<T> implements Publisher<T> {
//    private final T value;
//    private final List<Consumer<Subscriber<? super T>>> operators = new ArrayList<>();
//
//    public Mono(T value) {
//        this.value = value;
//    }
//
//    // 延迟操作符链：map 操作符
//    public <R> Mono<R> map(Function<? super T, ? extends R> mapper) {
//        Mono<R> newMono = new Mono<>(null);  // 创建新的 Mono 实例，返回的类型是 R
//        operators.add(new Consumer<Subscriber<? super T>>() {
//            @Override
//            public void accept(Subscriber<? super T> subscriber) {
//                // 执行 map 操作，传递映射后的值
//                R mappedValue = mapper.apply(value);
//                subscriber.onNext(mappedValue); // 正确传递映射后的值
//            }
//        });
//        return newMono; // 返回新的 Mono
//    }
//
//    @Override
//    public void subscribe(Subscriber<? super T> subscriber) {
//        // 执行操作符链
//        for (Consumer<Subscriber<? super T>> operator : operators) {
//            operator.accept(subscriber);
//        }
//        subscriber.onComplete();  // 完成流的传递
//    }
//
//    public static void main(String[] args) {
//        Mono<Integer> mono = new Mono<>(10);
//
//        // 使用 map 操作符进行类型转换
//        mono.map(value -> value * 2)  // 返回 Mono<Integer>
//                .map(value -> "Result: " + value)  // 返回 Mono<String>
//                .subscribe(new Subscriber<String>() {
//                    @Override
//                    public void onNext(String value) {
//                        System.out.println("Received: " + value);
//                    }
//
//                    @Override
//                    public void onComplete() {
//                        System.out.println("Completed.");
//                    }
//
//                    @Override
//                    public void onError(Throwable t) {
//                        t.printStackTrace();
//                    }
//                });
//    }
//}
